home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 1 / Cream of the Crop 1.iso / WINDOWS / PROFFT.ARJ / MISCFUNC.CPP < prev    next >
C/C++ Source or Header  |  1992-04-27  |  6KB  |  160 lines

  1. /****************************************************************************
  2.     MISCFUNC.CPP     Denne filen inneholder (i denne rekkef°lgen):
  3. *****************************************************************************
  4. void SetBMPPixel(HANDLE hBitmap, int iX, int iY, int iW, int iH, BYTE Colour)
  5. BYTE GetBMPPixel(HANDLE hBitmap, int iX, int iY, int iW, int iH)
  6. void SetComplex(HANDLE hComplex, int iX, int iY, int iW, int iH, prcomplex *compZ)
  7. void GetComplex(HANDLE hComplex, int iX, int iY, int iW, int iH, prcomplex *compZ)
  8. ****************************************************************************/
  9. #include "owl.h"
  10. #include "applicat.h"
  11. #include "string.h"
  12. #include "mem.h"
  13.  
  14. #pragma hdrstop
  15. #include "profftid.h" // Symbolske konstanter
  16. #include "profft.h"   // Klassedefinisjoner
  17. #include "prcomp.h"   // Kompleks struktur + komplekse konst.
  18.  
  19. void SetBMPPixel(HANDLE hBitmap, int iX, int iY, int iW, int iH, BYTE Colour)
  20. /****************************************************************************
  21. Denne setter en pixel i et DI bitmap. Merk! Den setter en verdi i bitmappen,
  22. ikke en farge. Vi forutsetter at bitmappen er av riktig format (8 bit. pr
  23. pixel) og at verdien som settes stemmer med den aktuelle fargetabellen for
  24. bitmappen. Denne fungerer uavhengig av objektene og krever derfor bredde og
  25. h°yde pσ bitmappen som parametre.
  26.  
  27. HANDLE hBitmap        Handle til DI bitmappen.
  28. int iX                        X koordinatet
  29. int iY                        Y koordinatet
  30. int iW                        Bredden pσ bitmappen
  31. int iH                        H°yden pσ bitmappen
  32. BYTE Colour                Verdien som skal settes.
  33.  
  34. Forutsetter:  At de parametrene som sendes er lovlige, dvs. vi har ingen
  35.                             feilsjekking om kalleren fors°ker σ sette bytes utenfor
  36.                             arrayet.
  37.  
  38. Kodet av:   MK
  39. *****************************************************************************/
  40. {
  41.     char huge *hpBitmap;
  42.  
  43.     hpBitmap = (char huge *)GlobalLock(hBitmap);
  44.     if (hpBitmap!=NULL)
  45.         //  Denne regner ut posisjon i bitmaparrayet. Siden DI bitmappen
  46.         //  addresseres fra slutten av bitmappen, mσ vi ta Y koordinatet
  47.         //  og trekke fra h°yden. Dessuten ganger vi med bredden og plusser
  48.         //  pσ X koordinatet (vanlig posisjonering i 2D array).
  49.         hpBitmap[(long)(iW)*(iH-iY-1)+iX]=Colour;
  50.     else
  51.         MessageBox(GetActiveWindow(), "TGenericPicWindow::SetBMPPixel called when bitmap was not locked",
  52.                 ERROR_CAPTION, MB_ERROR);
  53. }
  54.  
  55. BYTE GetBMPPixel(HANDLE hBitmap, int iX, int iY, int iW, int iH)
  56. /****************************************************************************
  57. Denne henter en verdi i et DI bitmap. Merk! Den henter en verdi i bitmappen,
  58. ikke en farge. Vi forutsetter at bitmappen er av riktig format (8 bit. pr
  59. pixel) og at verdien som settes stemmer med den aktuelle fargetabellen for
  60. bitmappen. Denne fungerer uavhengig av objektene og krever derfor bredde og
  61. h°yde pσ bitmappen som parametre.
  62.  
  63. HANDLE hBitmap        Handle til DI bitmappen.
  64. int iX                        X koordinatet
  65. int iY                        Y koordinatet
  66. int iW                        Bredden pσ bitmappen
  67. int iH                        H°yden pσ bitmappen
  68.  
  69. Returnerer:     BYTE  Verdien i den aktuelle posisjonen.
  70.  
  71. Forutsetter:  At de parametrene som sendes er lovlige, dvs. vi har ingen
  72.                             feilsjekking om kalleren fors°ker σ lese bytes utenfor
  73.                             arrayet.
  74.  
  75. Kodet av:   MK
  76. *****************************************************************************/
  77. {
  78.     char huge *hpBitmap;
  79.  
  80.     hpBitmap = (char huge *)GlobalLock(hBitmap);
  81.     if (hpBitmap!=NULL)
  82.         //  Denne regner ut posisjon i bitmaparrayet. Siden DI bitmappen
  83.         //  addresseres fra slutten av bitmappen, mσ vi ta Y koordinatet
  84.         //  og trekke fra h°yden. Dessuten ganger vi med bredden og plusser
  85.         //  pσ X koordinatet (vanlig posisjonering i 2D array).
  86.         return ((unsigned char)(hpBitmap[(long)(iW)*(iH-iY-1)+iX]));
  87.     else
  88.         MessageBox(GetActiveWindow(), "TGenericPicWindow::GetBMPPixel called when bitmap was not locked",
  89.                 ERROR_CAPTION, MB_ERROR);
  90.     return FALSE;
  91. }
  92.  
  93.  
  94. void SetComplex(HANDLE hComplex, int iX, int iY, int iW, int iH, prcomplex *compZ)
  95. /****************************************************************************
  96. Denne setter en verdi i et komplekst bilde. Denne fungerer uavhengig av
  97. objektene og krever derfor bredde og h°yde pσ bildet som parametre.
  98.  
  99. HANDLE hComplex        Handle til DI bitmappen.
  100. int iX                        X koordinatet
  101. int iY                        Y koordinatet
  102. int iW                        Bredden pσ bitmappen
  103. int iH                        H°yden pσ bitmappen
  104. prcomplex *compZ    Peker til det komplekse tallet som skal settes.
  105.  
  106. Forutsetter:  At de parametrene som sendes er lovlige, dvs. vi har ingen
  107.                             feilsjekking om kalleren fors°ker σ sette tall utenfor
  108.                             arrayet.
  109.  
  110. Kodet av:   MK
  111. *****************************************************************************/
  112. {
  113.     prcomplex huge *hpComplex;
  114.     long lOffset;
  115.  
  116.     hpComplex = (prcomplex huge *)GlobalLock(hComplex);
  117.     if (hpComplex!=NULL)
  118.     {
  119.         lOffset = (((long)(iH-iY-1)*iW+iX));
  120.         _fmemcpy(&hpComplex[lOffset], compZ, sizeof(prcomplex));
  121.     }
  122.     else
  123.         MessageBox(GetActiveWindow(), "SetComplex GlobalLock failed",
  124.                 ERROR_CAPTION, MB_OK);
  125. }
  126.  
  127. void GetComplex(HANDLE hComplex, int iX, int iY, int iW, int iH, prcomplex *compZ)
  128. /****************************************************************************
  129. Denne henter en verdi i et komplekst bilde. Denne fungerer uavhengig av
  130. objektene og krever derfor bredde og h°yde pσ bildet som parametre.
  131.  
  132. HANDLE hComplex        Handle til DI bitmappen.
  133. int iX                        X koordinatet
  134. int iY                        Y koordinatet
  135. int iW                        Bredden pσ bitmappen
  136. int iH                        H°yden pσ bitmappen
  137. prcomplex *compZ    Peker til det komplekse tallet som skal motta kopien
  138.                                     av tallet i den oppgitte posisjonen.
  139.  
  140. Forutsetter:  At de parametrene som sendes er lovlige, dvs. vi har ingen
  141.                             feilsjekking om kalleren fors°ker σ sette tall utenfor
  142.                             arrayet.
  143.  
  144. Kodet av:   MK
  145. *****************************************************************************/
  146. {
  147.     prcomplex huge *hpComplex;
  148.     long lOffset;
  149.  
  150.     hpComplex = (prcomplex huge *)GlobalLock(hComplex);
  151.     if (hpComplex!=NULL)
  152.     {
  153.         lOffset = (((long)(iH-iY-1)*iW+iX));
  154.         _fmemcpy(compZ, &hpComplex[lOffset], sizeof(prcomplex));
  155.     }
  156.     else
  157.         MessageBox(GetActiveWindow(), "GetComplex GlobalLock failed",
  158.                 ERROR_CAPTION, MB_OK);
  159. }
  160.